home *** CD-ROM | disk | FTP | other *** search
- package mx.messaging.channels
- {
- import flash.events.Event;
- import flash.events.TimerEvent;
- import flash.utils.Timer;
- import mx.core.mx_internal;
- import mx.logging.Log;
- import mx.messaging.Channel;
- import mx.messaging.Consumer;
- import mx.messaging.MessageAgent;
- import mx.messaging.MessageResponder;
- import mx.messaging.events.ChannelFaultEvent;
- import mx.messaging.messages.AbstractMessage;
- import mx.messaging.messages.AsyncMessage;
- import mx.messaging.messages.CommandMessage;
- import mx.messaging.messages.IMessage;
- import mx.utils.Translator;
-
- use namespace mx_internal;
-
- public class PollingChannel extends Channel
- {
- private static const TRANSLATOR:Translator = Translator.getDefaultInstanceFor(PollingChannel);
-
- private var _pollingEnabled:Boolean;
-
- private var _timer:Timer;
-
- protected var _shouldPoll:Boolean;
-
- private var _pollingRef:int = -1;
-
- public function PollingChannel(param1:String, param2:String)
- {
- _pollingRef = -1;
- super(param1,param2);
- _pollingEnabled = true;
- _shouldPoll = false;
- if(timerRequired())
- {
- _timer = new Timer(3000);
- _timer.addEventListener(TimerEvent.TIMER,internalPoll);
- }
- }
-
- protected function timerRequired() : Boolean
- {
- return true;
- }
-
- protected function startPolling() : void
- {
- if(_pollingEnabled)
- {
- _shouldPoll = true;
- if(Log.isInfo())
- {
- _log.info("\'{0}\' channel polling started.",id);
- }
- if(_timer != null)
- {
- _timer.start();
- }
- }
- else
- {
- if(Log.isError())
- {
- _log.error("\'{0}\' channel polling error.",id);
- }
- dispatchEvent(ChannelFaultEvent.createEvent(this,false,"Channel.Polling.Error","error",TRANSLATOR.textOf("pollingRequestNotAllowed",id)));
- }
- }
-
- protected function get internalPollingEnabled() : Boolean
- {
- return _pollingEnabled;
- }
-
- protected function internalPoll(param1:Event = null) : void
- {
- var n:int = 0;
- var i:int = 0;
- var agents:Array = null;
- var agentLength:int = 0;
- var j:int = 0;
- var agent:Object = null;
- var cons:Consumer = null;
- var msg:CommandMessage = null;
- var event:Event = param1;
- if(Log.isInfo())
- {
- _log.info("\'{0}\' channel requesting queued messages.",id);
- }
- n = int(channelSets.length);
- i = 0;
- while(i < n)
- {
- agents = channelSets[i].messageAgents;
- agentLength = int(agents.length);
- j = 0;
- while(j < agentLength)
- {
- agent = agents[j];
- if(agent is Consumer && Consumer(agent).subscribed)
- {
- cons = Consumer(agent);
- msg = new CommandMessage();
- msg.operation = CommandMessage.POLL_OPERATION;
- msg.clientId = cons.clientId;
- msg.destination = cons.destination;
- if(cons.subtopic.length > 0)
- {
- msg.headers[AsyncMessage.SUBTOPIC_HEADER] = cons.subtopic;
- }
- if(cons.requestTimeout > 0)
- {
- msg.headers[AbstractMessage.REQUEST_TIMEOUT_HEADER] = cons.requestTimeout;
- }
- if(cons.timestamp > msg.timestamp)
- {
- msg.timestamp = cons.timestamp;
- }
- msg.messageRefType = cons.messageType;
- if(Log.isDebug())
- {
- _log.debug("\'{0}\' channel sending poll message\n{1}\n",id,msg.toString());
- }
- try
- {
- internalSend(new PollCommandMessageResponder(cons,msg,this));
- }
- catch(e:Error)
- {
- mx_internal::stopPolling();
- throw e;
- }
- }
- j++;
- }
- i++;
- }
- }
-
- protected function set internalPollingEnabled(param1:Boolean) : void
- {
- _pollingEnabled = param1;
- if(!param1 && timerRunning)
- {
- mx_internal::stopPolling();
- }
- else if(param1 && !timerRunning && _shouldPoll)
- {
- startPolling();
- }
- }
-
- final override protected function getMessageResponder(param1:MessageAgent, param2:IMessage) : MessageResponder
- {
- var _loc3_:MessageResponder = null;
- var _loc4_:CommandMessage = null;
- _loc3_ = null;
- if(param1 is Consumer && param2 is CommandMessage)
- {
- _loc4_ = CommandMessage(param2);
- if(_loc4_.operation == CommandMessage.SUBSCRIBE_OPERATION || _loc4_.operation == CommandMessage.UNSUBSCRIBE_OPERATION)
- {
- _loc3_ = getPollSyncMessageResponder(Consumer(param1),_loc4_);
- }
- else if(_loc4_.operation == CommandMessage.POLL_OPERATION)
- {
- _loc3_ = new PollCommandMessageResponder(Consumer(param1),param2,this);
- }
- }
- return _loc3_ == null ? getDefaultMessageResponder(param1,param2) : _loc3_;
- }
-
- public function disablePolling() : void
- {
- --_pollingRef;
- if(_pollingRef < 0)
- {
- mx_internal::stopPolling();
- }
- }
-
- public function poll() : void
- {
- internalPoll();
- }
-
- protected function get internalPollingInterval() : Number
- {
- return _timer == null ? 0 : _timer.delay;
- }
-
- override protected function internalDisconnect(param1:Boolean = false) : void
- {
- mx_internal::stopPolling();
- super.internalDisconnect(param1);
- }
-
- protected function getPollSyncMessageResponder(param1:Consumer, param2:CommandMessage) : MessageResponder
- {
- return null;
- }
-
- protected function applyPollingSettings(param1:XML) : void
- {
- var _loc2_:XML = null;
- if(param1.properties.length())
- {
- _loc2_ = param1.properties[0];
- if(_loc2_["polling-enabled"].length())
- {
- internalPollingEnabled = _loc2_["polling-enabled"].toString() == "true";
- }
- if(_loc2_["polling-interval-seconds"].length())
- {
- internalPollingInterval = parseInt(_loc2_["polling-interval-seconds"].toString()) * 1000;
- }
- }
- }
-
- override protected function connectFailed(param1:ChannelFaultEvent) : void
- {
- mx_internal::stopPolling();
- super.connectFailed(param1);
- }
-
- public function enablePolling() : void
- {
- ++_pollingRef;
- if(_pollingRef == 0)
- {
- startPolling();
- }
- }
-
- protected function get timerRunning() : Boolean
- {
- return _timer != null && _timer.running;
- }
-
- mx_internal function stopPolling() : void
- {
- if(Log.isInfo())
- {
- _log.info("\'{0}\' channel polling stopped.",id);
- }
- if(_timer != null)
- {
- _timer.stop();
- }
- _pollingRef = -1;
- _shouldPoll = false;
- }
-
- protected function getDefaultMessageResponder(param1:MessageAgent, param2:IMessage) : MessageResponder
- {
- return super.getMessageResponder(param1,param2);
- }
-
- protected function set internalPollingInterval(param1:Number) : void
- {
- if(param1 > 0)
- {
- if(_timer != null)
- {
- _timer.delay = param1;
- if(!timerRunning && _shouldPoll)
- {
- startPolling();
- }
- }
- return;
- }
- throw new ArgumentError(TRANSLATOR.textOf("pollingIntervalNonPositive"));
- }
- }
- }
-
- import mx.core.mx_internal;
- import mx.messaging.Consumer;
- import mx.messaging.MessageResponder;
- import mx.messaging.events.ChannelFaultEvent;
- import mx.messaging.messages.AcknowledgeMessage;
- import mx.messaging.messages.CommandMessage;
- import mx.messaging.messages.ErrorMessage;
- import mx.messaging.messages.IMessage;
- import mx.utils.Translator;
-
- use namespace mx_internal;
-
- class PollCommandMessageResponder extends MessageResponder
- {
- private static const TRANSLATOR:Translator = Translator.getMessagingInstance();
-
- private static const NOT_SUBSCRIBED_CODE:String = "Server.Processing.NotSubscribed";
-
- public function PollCommandMessageResponder(param1:Consumer, param2:IMessage, param3:PollingChannel)
- {
- super(param1,param2,param3);
- }
-
- override protected function resultHandler(param1:IMessage) : void
- {
- var _loc2_:Array = null;
- var _loc3_:ErrorMessage = null;
- if(param1 is CommandMessage && param1.body != null)
- {
- _loc2_ = param1.body as Array;
- Consumer(agent).mx_internal::dispatchMessageList(_loc2_);
- }
- else if(!(param1 is AcknowledgeMessage))
- {
- _loc3_ = new ErrorMessage();
- _loc3_.faultDetail = TRANSLATOR.textOf("receivedNull");
- status(_loc3_);
- }
- }
-
- override protected function statusHandler(param1:IMessage) : void
- {
- var _loc2_:ErrorMessage = null;
- var _loc3_:Consumer = null;
- var _loc4_:String = null;
- var _loc5_:ChannelFaultEvent = null;
- _loc2_ = param1 as ErrorMessage;
- if(_loc2_ != null && _loc2_.faultCode == NOT_SUBSCRIBED_CODE)
- {
- PollingChannel(channel).disablePolling();
- _loc3_ = Consumer(agent);
- if(_loc3_.subscribed)
- {
- _loc3_.disconnect();
- _loc3_.subscribe();
- }
- else
- {
- _loc3_.fault(_loc2_,message);
- _loc3_.disconnect();
- }
- }
- else
- {
- PollingChannel(channel).mx_internal::stopPolling();
- _loc4_ = _loc2_ != null ? _loc2_.faultDetail : "";
- _loc5_ = ChannelFaultEvent.createEvent(channel,false,"Channel.Polling.Error","error",_loc4_);
- _loc5_.rootCause = param1;
- channel.dispatchEvent(_loc5_);
- }
- }
- }
-